Skip to main content

qiqi.math

math 模块提供加、减、乘、除 等运算方法。

为什么要提供额外的计算方法? js中提供的运算操作符在处理浮点数时会导致精度问题, 比如:

0.55 * 100  // 55.00000000000001
0.3 - 0.1 // 0.19999999999999998
0.1 + 0.2 // 0.30000000000000004

API

decimal(x)

将基本数值包装成Decimal包装类型, 以便使用 Decimal对象下的操作方法

  • 参数:
参数说明类型必须
x数值number
  • 返回值:Decimal
    qiqi.math.div(10, 2).value  //5
// 等同于:
qiqi.math.decimal(10).div(2).value //5

value

value 不是math的属性,是Decimal对象的属性, 用来获取值类型

  • 返回值:number
    qiqi.math.decimal(10).value  // 10 

add(x, y)

加法

  • 参数:
参数说明类型必须
x加数number
y加数number可选
  • 返回值:Decimal
    qiqi.math.add(0.1, 0.2).value  //0.3
// 等同于:
qiqi.math.decimal(0.1).add(0.2).value

sub(x, y)

减法

  • 参数:
参数说明类型必须
x被减数number
y加数number可选

只传一个参数时, x是减数 传两个参数时, x 是被减数

  • 返回值:Decimal
    qiqi.math.sub(0.3, 0.2).value  //0.1
// 等同于:
qiqi.math.decimal(0.3).sub(0.2).value //0.1

mul(x, y)

减法

  • 参数:
参数说明类型必须
x乘数number
y乘数number可选
  • 返回值:Decimal
    qiqi.math.mul(3, 2).value  //6
// 等同于:
qiqi.math.decimal(3).mul(2).value //6

div(x, y)

除法

  • 参数:
参数说明类型必须
x被除数number
y除数number可选

只传一个参数时, x是除数 传两个参数时, x 是被除数

  • 返回值:Decimal
    qiqi.math.div(10, 2).value  //5
// 等同于:
qiqi.math.decimal(10).div(2).value //5

abs(x)

绝对值

  • 参数:
参数说明类型必须
x取绝对值number可选
  • 返回值:Decimal
    qiqi.math.abs(-1).value  //1
// 等同于:
qiqi.math.decimal(-1).abs().value //5

random(dp)

生成随机数

  • 参数:
参数说明类型必须
dp小数位数number可选
  • 返回值:Decimal
    qiqi.math.random(10).value  // '0.4117936847'

round(x)

返回与给出的数值表达式最接近的整数 (四舍五入)

  • 参数:
参数说明类型必须
x取整的数number可选
qiqi.math.round(4.4).value      // 4

qiqi.math.round(4.7).value // 5
// 等同于
qiqi.math.decimal(4.7).round().value

  • 返回值:Decimal

floor(x)

返回小于等于其数值参数的最大整数。


qiqi.math.floor(4.7).value // 4
// 等同于
qiqi.math.decimal(4.7).floor().value

  • 参数:
参数说明类型必须
x取整的数number可选
  • 返回值:Decimal

ceil(x)

返回大于等于其数字参数的最小整数。

qiqi.math.ceil(4.1).value      // 5

qiqi.math.ceil(4.7).value // 5
// 等同于
qiqi.math.ceil(4.7).floor().value

  • 参数:
参数说明类型必须
x取整的数number可选
  • 返回值:Decimal

toDp(x)

toDecimalPlaces

设置小数位精度


qiqi.math.decimal(12.34567).toDp(2).value // 12.34

const y = qiqi.math.decimal(9876.56371);
y.toDP(3).value // 9876.564
y.toDP(1, 0).value // '9876.6'
y.toDP(1, 1).value //9876.5
y.toDP(1, 1).value //9876.6
  • 参数:
参数说明类型必须
x小数位数number必填
dp最后一位向上向下取关系number 0:向上取整
1:向下取整
4: 四舍五入(默认)
  • 返回值:Decimal
caution
  1. 所有的运算函数,返回的是一个 Decimal 的包装对象, 这样可以做到链式调用,比如:
qiqi.math.add(5, 3).sub(2).mul(2)

计算结果返回的是一个对象,给 form表单的表单项赋值的时候需要调用value属性转化成数值

qiqi.math.add(1,2).value

运算函数的入参是数值, 传入Decimal对象是错误的:


const math = qiqi.math;

math.add(1, 2).div(math.sub(2,1)) // ☠️ 错误写法, div方法入参必须是数值

math.add(1, 2).div(math.sub(2,1).value) // 👍 正确写法


  1. 结构时只能解构到math, 不能再往下解构:

const math = qiqi.math;

math.add(1, 2); // 👍 正确写法

const add = math.add; // ☠️ 使用错误
add(1, 2) // ❌ 会包this指针错误